// holds an instance of XMLHttpRequest 
var xmlHttp = createXmlHttpRequestObject(); 
 
// creates an XMLHttpRequest instance 
function createXmlHttpRequestObject()  
{ 
  // will store the reference to the XMLHttpRequest object 
  var xmlHttp; 
  // this should work for all browsers except IE6 and older 
  try 
  { 
    // try to create XMLHttpRequest object 
    xmlHttp = new XMLHttpRequest(); 
  } 
  catch(e) 
  { 
    // assume IE6 or older 
    var XmlHttpVersions = new Array('MSXML2.XMLHTTP.6.0', 
                                    'MSXML2.XMLHTTP.5.0', 
                                    'MSXML2.XMLHTTP.4.0', 
                                    'MSXML2.XMLHTTP.3.0', 
                                    'MSXML2.XMLHTTP', 
                                    'Microsoft.XMLHTTP'); 
    // try every prog id until one works 
    for (var i=0; i<XmlHttpVersions.length && !xmlHttp; i++)  
    { 
      try  // JavaScript Document
	        {  
        // try to create XMLHttpRequest object 
        xmlHttp = new ActiveXObject(XmlHttpVersions[i]); 
      }  
      catch (e) {} 
    } 
  } 
  // return the created object or display an error message 
  if (!xmlHttp) 
    alert("Error creating the XMLHttpRequest object."); 
  else  
    return xmlHttp; 
} 
 
// read a file from the server 
function process() 
{ 
  // only continue if xmlHttp isn't void 
  if (xmlHttp) 
  { 
    // try to connect to the server 
    try 
    { 
      // initiate reading a file from the server 
      xmlHttp.open("GET", "books.xml", true); 
      xmlHttp.onreadystatechange = handleRequestStateChange; 
      xmlHttp.send(null); 
    } 
    // display the error in case of failure 
    catch (e) 
    { 
      alert("Can't connect to server:\n" + e.toString()); 
    } 
  } 
} 
 
// function called when the state of the HTTP request changes 
function handleRequestStateChange()  
{ 
  // when readyState is 4, we are ready to read the server response 
  if (xmlHttp.readyState == 4)  
  { 
    // continue only if HTTP status is "OK" s
    if (xmlHttp.status == 200)  
    { 
      try 
      { 
        // do something with the response from the server 
        handleServerResponse(); 
      } 
      catch(e) 
      { 
        // display error message 
        alert("Error reading the response: " + e.toString()); 
      } 
    }  
    else 
    { 
      // display status message 
      alert("There was a problem retrieving the data:\n" +  
            xmlHttp.statusText); 
    } 
  } 
} 
// handles the response received from the server 
function handleServerResponse() 
{ 
  // read the message from the server 
  var xmlResponse = xmlHttp.responseXML; 
  // obtain the XML's document element 
  xmlRoot = xmlResponse.documentElement;   
  // obtain arrays with book titles and ISBNs  
  titleArray = xmlRoot.getElementsByTagName("title"); 
  //titleArray2 = titleArray.getElementsByTagName("title");
  isbnArray = xmlRoot.getElementsByTagName("isbn"); 
  //khoi
  catnameArray = xmlRoot.getElementsByTagName("catbook"); 
  // generate HTML output 
  var html = "";   
  // iterate through the arrays and create an HTML structure 
  for (var i=0; i<titleArray.length; i++) {
	   
  	html += catnameArray.item(i).firstChild.data +  
            ", " + titleArray.item(i).firstChild.data +  
            ", " + isbnArray.item(i).firstChild.data + "<br/>"; 
  }
  // obtain a reference to the <div> element on the page 
  myDiv = document.getElementById("myDivElement"); 
  // display the HTML output 
  myDiv.innerHTML = "Server says: <br />" + html; 
} 
